package com.sean.springframework.beans.factory.support;

import com.sean.springframework.beans.BeansException;
import com.sean.springframework.beans.factory.config.BeanDefinition;

/**
 * 实例化 Bean类
 * 1. 在 AbstractAutowireCapableBeanFactory 类中实现了 Bean 的实例化操作 newInstance
 * 2. 在处理完 Bean 对象的实例化后，直接调用 addSingleton 方法存放到单例对象的缓存中去。
 */
public abstract class AbstractAutowireCapableBeanFactory extends AbstractBeanFactory {
    @Override
    protected Object createBean(String beanName, BeanDefinition beanDefinition) throws BeansException {
        Object bean = null;
        try{
            bean = beanDefinition.getBeanClass().newInstance();
        }catch (InstantiationException | IllegalAccessException e){
            throw new BeansException("Instantiation a bean failed", e);
        }
        addSingleton(beanName, bean);
        return bean;
    }
}
